DynamoDB Query এবং Scan অপারেশন

Database Tutorials - ডাইনামোডিবি (DynamoDB)
220
220

Amazon DynamoDB এ Query এবং Scan অপারেশন দুটি প্রধান উপায় ডেটা রিড করার জন্য। তবে, এই দুটি অপারেশন একে অপর থেকে আলাদা এবং তাদের ব্যবহারের জন্য বিভিন্ন পরিস্থিতি রয়েছে। এখানে Query এবং Scan এর মধ্যে পার্থক্য এবং প্রতিটির ব্যবহারিক গুরুত্ব বিস্তারিতভাবে তুলে ধরা হলো।


1. Query অপারেশন

Query অপারেশন ডেটা ফিল্টার এবং রিটার্ন করার জন্য সবচেয়ে কার্যকরী উপায়, বিশেষ করে যখন আপনি ডেটাকে একটি নির্দিষ্ট Partition Key এর ভিত্তিতে অনুসন্ধান করেন। Query অপারেশনটি Sort Key এর সাথে কাজ করতে পারে এবং ডেটার একটি নির্দিষ্ট সাবসেট রিটার্ন করতে সাহায্য করে।

Query এর বৈশিষ্ট্য:

  • Partition Key এবং Sort Key এর মাধ্যমে খুব দ্রুত ডেটা অনুসন্ধান করা যায়।
  • Query শুধুমাত্র একটি Partition Key এবং ঐ Partition এর মধ্যে থাকা Sort Key এর উপর কাজ করে।
  • Filter Expressions ব্যবহার করে Query এর রেজাল্ট আরও নির্দিষ্ট করা যায়, তবে এটি কাজের কর্মক্ষমতায় প্রভাব ফেলতে পারে।
  • Pagination সহ বড় ডেটা সেটের জন্য Query অপারেশন ব্যবহার করা যায়, যেখানে পার্টিশন ভেতরেই সীমানা নির্ধারণ করা হয়।

Query অপারেশন উদাহরণ (AWS SDK - Python):

import boto3

# DynamoDB ক্লায়েন্ট তৈরি করা
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')

# Partition Key (UserID) এর মাধ্যমে ডেটা অনুসন্ধান
response = table.query(
    KeyConditionExpression=boto3.dynamodb.conditions.Key('UserID').eq('12345')
)

for item in response['Items']:
    print(item)

Query অপারেশনের সুবিধা:

  • খুব দ্রুত এবং কার্যকরী।
  • একটি নির্দিষ্ট Partition Key এর ভিত্তিতে ডেটা খুঁজে পাওয়া যায়।
  • সুনির্দিষ্ট ফলাফল প্রদান করে।

2. Scan অপারেশন

Scan অপারেশন ডেটাবেসের সমস্ত টেবিলের মধ্যে পুরো ডেটা স্ক্যান করে এবং সমস্ত আইটেম রিটার্ন করে। এটি Query এর চেয়ে কম কার্যকরী, কারণ এতে পুরো টেবিল স্ক্যান করতে হয় এবং ডেটা ফিল্টার করার জন্য Filter Expressions ব্যবহার করা হয়।

Scan এর বৈশিষ্ট্য:

  • Scan অপারেশন সম্পূর্ণ টেবিল স্ক্যান করে এবং ফিল্টার প্রক্রিয়া পরে কার্যকরী হয়।
  • কোন Partition Key নির্দিষ্ট করা হয় না, ফলে এটি পুরো টেবিল থেকে সব ডেটা রিটার্ন করতে পারে।
  • কম পারফর্মেন্স এবং দ্রুত ফলাফল প্রাপ্তি কম।
  • শুধুমাত্র ছোট ডেটাসেটের জন্য উপযুক্ত, বড় ডেটাসেট হলে এটি সময়সাপেক্ষ এবং ব্যয়বহুল হতে পারে।

Scan অপারেশন উদাহরণ (AWS SDK - Python):

import boto3

# DynamoDB ক্লায়েন্ট তৈরি করা
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')

# Scan অপারেশন
response = table.scan(
    FilterExpression=boto3.dynamodb.conditions.Attr('Age').gt(30)
)

for item in response['Items']:
    print(item)

Scan অপারেশনের সীমাবদ্ধতা:

  • পুরো টেবিল স্ক্যান করার ফলে বড় ডেটাসেটে স্লো হতে পারে।
  • পারফরম্যান্সের জন্য ScanFilter Expressions ব্যবহার করা হয়, তবে এটি সম্পূর্ণ ডেটা স্ক্যান করতে বাধ্য করে।

Query এবং Scan এর মধ্যে পার্থক্য

বৈশিষ্ট্যQueryScan
কাজের ধরননির্দিষ্ট Partition Key এর উপর ভিত্তি করেপুরো টেবিল স্ক্যান করা
ডেটা রিটার্নএকক Partition বা Sort Key অনুসারে ফিল্টারডসম্পূর্ণ টেবিলের আইটেম রিটার্ন
পারফরম্যান্সদ্রুত এবং কার্যকরীস্লো এবং বড় ডেটাসেটে বেশি ব্যয়বহুল
ফিল্টারিংFilter Expressions মাধ্যমে ফিল্টার করা যায়Filter Expressions মাধ্যমে ফিল্টার করা যায়
উপযুক্ত ব্যবহারনির্দিষ্ট Partition Key এর ভিত্তিতে ডেটা অনুসন্ধানছোট টেবিল বা যেখানে Partition Key নির্দিষ্ট নয়

কোন অপারেশন কখন ব্যবহার করবেন?

  • Query: যখন আপনার কাছে একটি নির্দিষ্ট Partition Key এবং প্রাসঙ্গিক Sort Key থাকে এবং দ্রুত এবং কার্যকরী ডেটা রিট্রিভাল প্রয়োজন।
  • Scan: যখন আপনি পুরো টেবিলের মধ্যে ডেটা অনুসন্ধান করতে চান বা Partition Key জানা না থাকলে, তবে এটা কম কার্যকরী হতে পারে।
common.content_added_by

Query এর বেসিক ধারণা এবং ব্যবহার

202
202

DynamoDB তে Query একটি পদ্ধতি যার মাধ্যমে আপনি টেবিলের মধ্যে নির্দিষ্ট আইটেম (Items) দ্রুত খুঁজে পেতে পারেন, বিশেষত যখন আপনি এক বা একাধিক অটোমেটিকলি সাজানো (sorted) প্রাথমিক কী ব্যবহার করেন। এটি এক ধরনের প্রক্রিয়া যা নির্দিষ্ট শর্তে ডেটা পুনরুদ্ধার করতে ব্যবহৃত হয়।


Query এর বেসিক ধারণা:

  1. Primary Key: Query অপারেশন শুধুমাত্র Primary Key (Partition Key এবং Optional Sort Key) দ্বারা সীমাবদ্ধ থাকে। এটি দ্রুত এবং দক্ষ উপায়ে ডেটা অনুসন্ধান করার জন্য ডিজাইন করা হয়েছে।
    • Partition Key: এটি ডেটা পার্টিশন করার জন্য ব্যবহৃত হয়।
    • Sort Key: এটি ডেটা সাজানোর জন্য ব্যবহৃত হয় (যদি থাকে)।
  2. Key Condition Expression: Query করার সময়, Key Condition Expression এর মাধ্যমে আপনি কিভাবে ডেটা খুঁজবেন তা নির্দিষ্ট করতে পারেন। এটি সাধারণত প্রাথমিক কী ব্যবহার করে শর্ত ঠিক করে।
  3. Filter Expression: Query থেকে ফেরত পাওয়া ডেটার উপর অতিরিক্ত শর্ত প্রয়োগ করতে Filter Expression ব্যবহার করা যায়। তবে, Filter Expression টেবিলের ডেটা ফিল্টার করার জন্য প্রয়োগ হয় এবং ডেটাবেসে আরো বেশি রেকর্ড স্ক্যান করতে পারে, যা পারফরম্যান্সে প্রভাব ফেলতে পারে।
  4. Projection Expression: আপনি চাইলে শুধুমাত্র নির্দিষ্ট Attributes (কলাম) প্রজেক্ট করতে পারেন, যা Query এর আউটপুটে প্রদর্শিত হবে।

Query ব্যবহার করার উদাহরণ (AWS SDK):

Query অপারেশন Example (Python - Boto3)

import boto3

# DynamoDB client তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')

# Query করা
response = table.query(
    KeyConditionExpression=boto3.dynamodb.conditions.Key('PartitionKey').eq('some_value')
)

# Query ফলাফল প্রিন্ট করা
for item in response['Items']:
    print(item)

Key Condition Expression:

  • Key('PartitionKey').eq('some_value'): এই শর্তটি নিশ্চিত করে যে শুধুমাত্র ঐ partition key এর রেকর্ডগুলো ফেরত আসবে, যার মান 'some_value'

Query এবং Scan এর মধ্যে পার্থক্য:

  • Query: এটি প্রাথমিক কী (Partition Key এবং Sort Key) দিয়ে নির্দিষ্ট ডেটা অনুসন্ধান করে। এটি দ্রুত এবং কম খরচে কাজ করে, কারণ এটি টেবিলের পার্টিশন অনুযায়ী ডেটা স্ক্যান করে।
  • Scan: এটি টেবিলের সমস্ত রেকর্ড স্ক্যান করে এবং পরে Filter Expression এর মাধ্যমে ডেটা ফিল্টার করে। এটি কম পারফরম্যান্স প্রদান করে এবং বেশি খরচে হতে পারে, বিশেষত বড় টেবিলের জন্য।

Query এর ব্যবহার:

  • রিয়েল-টাইম অ্যাপ্লিকেশন: দ্রুত ডেটা অ্যাক্সেস যেমন লাইভ স্কোর, ইউজার প্রোফাইল, লগ ডেটা অনুসন্ধানে ব্যবহৃত হয়।
  • ই-কমার্স সাইট: পণ্য অনুসন্ধান বা অর্ডার হিস্টোরি দেখাতে Query ব্যবহার করা হয়।
common.content_added_by

Filter Expressions এর মাধ্যমে Data Query

213
213

DynamoDB তে Filter Expressions ব্যবহার করে আপনি Query অথবা Scan অপারেশনে ডেটা ফিল্টার করতে পারেন। এই ফিচারটি আপনাকে নির্দিষ্ট শর্তে (conditions) মেলে এমন ডেটা ফেরত আনতে সহায়তা করে। Filter Expressions সাধারণত Query বা Scan অপারেশনের পরে প্রয়োগ করা হয়, এবং এটি শুধুমাত্র রিটার্ন করা ডেটা সীমাবদ্ধ করে, তবে এটি পারফরম্যান্সকে ততটা প্রভাবিত করে না।

Filter Expressions কী?

Filter Expression হল একটি শর্ত যা Query অথবা Scan অপারেশন চলাকালীন ডেটার মধ্যে filter প্রয়োগ করে। Filter Expression ব্যবহৃত হলে, DynamoDB প্রথমে নির্দিষ্ট প্যারামিটার অনুযায়ী ডেটা অনুসন্ধান করে (Query বা Scan অপারেশন), তারপর যেসব আইটেম শর্ত পূর্ণ করে না, সেগুলো বাদ দিয়ে রিটার্ন করে।

Filter Expressions এর ব্যবহার:

1. Query অপারেশনে Filter Expressions

Query অপারেশন দিয়ে আপনি একটি টেবিলের ডেটা অনুসন্ধান করেন এবং Filter Expression ব্যবহার করে আপনি নির্দিষ্ট কন্ডিশন অনুসারে ডেটা ফিল্টার করতে পারেন।

উদাহরণ: ধরুন, আপনার একটি টেবিল আছে যেখানে ProductID, ProductCategory, এবং Price আছে। আপনি এমন সমস্ত প্রোডাক্টের তথ্য চান যাদের ক্যাটেগরি "Electronics" এবং Price 50 এর বেশি।

Query Expression with Filter Expression:

const params = {
    TableName : "Products",
    KeyConditionExpression: "ProductCategory = :category",
    FilterExpression: "Price > :price",
    ExpressionAttributeValues: {
        ":category": "Electronics",
        ":price": 50
    }
};

docClient.query(params, function(err, data) {
    if (err) {
        console.log("Error", err);
    } else {
        console.log("Success", data.Items);
    }
});

এখানে:

  • KeyConditionExpression দ্বারা ProductCategory এর জন্য Query নির্ধারণ করা হয়েছে।
  • FilterExpression দ্বারা Price এর জন্য শর্ত দেয়া হয়েছে (Price > 50)।

2. Scan অপারেশনে Filter Expressions

Scan অপারেশন DynamoDB টেবিলের সমস্ত আইটেম স্ক্যান করে, এবং আপনি Filter Expressions ব্যবহার করে ফলাফলগুলো ফিল্টার করতে পারেন। তবে, Scan অপারেশনটি কম পারফর্ম্যান্স হতে পারে, কারণ এটি পুরো টেবিল স্ক্যান করে।

উদাহরণ: ধরুন, আপনার একটি টেবিল "Employees" আছে, এবং আপনি সব কর্মচারীকে দেখতে চান যাদের বয়স 30 এর বেশি এবং পদ "Manager"।

Scan Expression with Filter Expression:

const params = {
    TableName : "Employees",
    FilterExpression: "Age > :age and Position = :position",
    ExpressionAttributeValues: {
        ":age": 30,
        ":position": "Manager"
    }
};

docClient.scan(params, function(err, data) {
    if (err) {
        console.log("Error", err);
    } else {
        console.log("Success", data.Items);
    }
});

এখানে:

  • FilterExpression দ্বারা Age এর জন্য শর্ত দেয়া হয়েছে (Age > 30) এবং Position এর জন্য শর্ত দেয়া হয়েছে (Position = "Manager")।

Filter Expressions এর মধ্যে ব্যবহারযোগ্য কিছু গুরুত্বপূর্ণ অপারেটর:

  1. Comparison Operators:
    • =, <, >, <=, >=, <> (Not equal)
    • উদাহরণ: Age > :age
  2. Logical Operators:
    • AND, OR
    • উদাহরণ: Age > :age AND Position = :position
  3. String Functions:
    • begins_with(attribute, value): যদি আপনি স্ট্রিংয়ের শুরুতে নির্দিষ্ট শব্দ দেখতে চান।
    • contains(attribute, value): যদি আপনি স্ট্রিংয়ের মধ্যে একটি নির্দিষ্ট শব্দ দেখতে চান।
    • উদাহরণ: begins_with(Username, "admin")
  4. Attribute Exists/Not Exists:
    • attribute_exists(attribute): যদি একটি অ্যাট্রিবিউট বিদ্যমান থাকে।
    • attribute_not_exists(attribute): যদি একটি অ্যাট্রিবিউট অনুপস্থিত থাকে।

Filter Expressions এর কিছু গুরুত্বপূর্ণ লক্ষ্যণীয় বিষয়:

  • Performance: Filter Expressions শুধুমাত্র ডেটা ফিল্টার করে, অর্থাৎ এটি অপারেশন শুরু হওয়ার পর কার্যকরী হয়। Query বা Scan অপারেশনটি পুরো টেবিল স্ক্যান করে, তারপরে Filter Expression প্রয়োগ হয়। যদি আপনার বড় টেবিল থাকে, তবে Scan অপারেশন ব্যবহার করার সময় পারফরম্যান্স সমস্যা হতে পারে।
  • Filter Expressions এবং Query: Query অপারেশনে Filter Expression ব্যবহারের মাধ্যমে আপনি ডেটার উপর নির্দিষ্ট শর্তের ফিল্টার প্রয়োগ করতে পারেন, তবে প্রথমে Key Condition Expression অনুযায়ী ডেটা স্ক্যান হবে।
  • Limitations: Filter Expressions শুধুমাত্র রিটার্নড ডেটাকে ফিল্টার করে, তাই আপনি অপ্রয়োজনীয় আইটেম খুঁজে পেতে পারেন যেগুলো আপনার query বা scan সময় বাছাই হয়নি।

সারাংশ:

Filter Expressions DynamoDB তে ডেটার রিটার্ন নিয়ে আরও ফাইন টিউনিং করার জন্য ব্যবহৃত হয়। এটি আপনাকে আরও নির্দিষ্টভাবে ডেটা পেতে সাহায্য করে, তবে এটি পুরো স্ক্যান বা কুয়েরি ফলাফলকে প্রভাবিত করে, এবং বড় টেবিলের ক্ষেত্রে পারফরম্যান্সের ওপর প্রভাব ফেলতে পারে।

common.content_added_by

Query এবং Scan এর মধ্যে পার্থক্য

207
207

Amazon DynamoDB তে Query এবং Scan দুটি প্রধান ডেটা রিট্রিভাল অপারেশন। যদিও উভয়ই ডেটা খোঁজার জন্য ব্যবহৃত হয়, কিন্তু তাদের কার্যপ্রণালী এবং পারফরম্যান্সে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।

এখানে Query এবং Scan এর মধ্যে পার্থক্যগুলি বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে:


১. Query অপারেশন

Query অপারেশনটি খুবই দক্ষ এবং এটি প্রাইমারি কিকে (Primary Key) ভিত্তিতে ডেটা খোঁজে। এটি একটি টেবিলের নির্দিষ্ট আইটেমগুলো বের করার জন্য ব্যবহৃত হয়, যেখানে আপনি Partition Key (এবং প্রযোজ্য হলে Sort Key) ব্যবহার করেন। Query অপারেশনটি দ্রুত এবং পারফরম্যান্স-অপটিমাইজড, কারণ এটি শুধু প্রয়োজনীয় ডেটা সার্চ করে।

Query অপারেশনের বৈশিষ্ট্য:

  • পারফরম্যান্স: Query দ্রুত এবং অনেক বেশি কার্যকরী, কারণ এটি শুধুমাত্র প্রয়োজনীয় ডেটার জন্য সার্চ করে।
  • কন্ডিশন: Query শুধুমাত্র Partition Key এবং Sort Key (যদি থাকে) দ্বারা ডেটা বের করতে সক্ষম। আপনি এটি Equality এবং Range Queries এর জন্য ব্যবহার করতে পারেন।
  • Filter Expressions: Query তে Filter Expressions ব্যবহার করতে পারেন, তবে এর পরেও Query মূলত নির্দিষ্ট Partition Key এবং Sort Key অনুসন্ধান করে।
  • Pagination: Query অপারেশনটি Pagination সাপোর্ট করে, যার মাধ্যমে আপনি বড় ডেটাসেটের মধ্যে পেজ-বাই-পেজ রেজাল্ট পাবেন।

Query উদাহরণ:

response = table.query(
    KeyConditionExpression=Key('UserID').eq('12345')
)
items = response.get('Items', [])
print(items)

এই কোডটি UserID = '12345' এর সাথে মেলে এমন সব আইটেম খুঁজে বের করবে।


২. Scan অপারেশন

Scan অপারেশনটি টেবিলের সমস্ত ডেটাকে একসাথে স্ক্যান করে এবং ফলস্বরূপ যতটুকু ডেটা মেলে, তা ফিরিয়ে দেয়। এটি Partition Key বা Sort Key এর সাথে সম্পর্কিত নয় এবং সাধারণত অনেক ধীর গতিতে কাজ করে, কারণ এটি পুরো টেবিল স্ক্যান করে। Scan অপারেশনটি পারফরম্যান্সের জন্য কম উপযুক্ত এবং সাধারণত ছোট টেবিল বা খুব প্রয়োজনীয় কেসে ব্যবহার করা উচিত।

Scan অপারেশনের বৈশিষ্ট্য:

  • পারফরম্যান্স: Scan অনেক ধীর গতিতে কাজ করে, কারণ এটি পুরো টেবিল স্ক্যান করে এবং সব ডেটা পরীক্ষা করে।
  • কন্ডিশন: Scan এ আপনি Filter Expressions ব্যবহার করতে পারেন, তবে Scan পুরো টেবিল স্ক্যান করার পর ফিল্টার করবে, যা পারফরম্যান্সে প্রভাব ফেলতে পারে।
  • রেজাল্ট সাইজ: যদি টেবিলের ডেটার পরিমাণ খুব বেশি হয়, তাহলে Scan অপারেশনটি খুব ধীর এবং বৃহৎ ফলাফল দিতে পারে।
  • Pagination: Scan অপারেশনও Pagination সাপোর্ট করে, যাতে আপনি বৃহৎ ডেটাসেটের মধ্যে পেজ-বাই-পেজ রেজাল্ট পেতে পারেন।

Scan উদাহরণ:

response = table.scan(
    FilterExpression=Attr('Age').gte(30)
)
items = response.get('Items', [])
print(items)

এই কোডটি সমস্ত টেবিল স্ক্যান করবে এবং যেখানে Age >= 30, সেইসব আইটেম ফিরিয়ে দিবে।


Query এবং Scan এর মধ্যে পার্থক্য:

ফিচারQueryScan
পারফরম্যান্সউচ্চ পারফরম্যান্স (দ্রুত) - শুধু প্রয়োজনীয় ডেটার জন্য সার্চ করেনিম্ন পারফরম্যান্স - পুরো টেবিল স্ক্যান করে
ডেটা রিটারিভালশুধুমাত্র Partition Key এবং Sort Key এর ভিত্তিতে ডেটা রিটারিভালপুরো টেবিল থেকে সমস্ত ডেটা স্ক্যান করে
কন্ডিশনকেবল Partition Key এবং Sort Key (যদি থাকে) ব্যবহার করতে হবেFilter Expressions ব্যবহার করা সম্ভব
রেজাল্ট সীমাদ্রুত ফলাফল এবং পেজিনেশন সাপোর্টস্লো এবং বড় ডেটাসেট নিয়ে কাজ করলে কম কার্যকর
ব্যবহার ক্ষেত্রনির্দিষ্ট Partition Key এর অধীনে ডেটা খোঁজার জন্য উপযুক্তটেবিলের সমস্ত ডেটা যাচাই করতে ব্যবহৃত

কখন Query ব্যবহার করবেন?

  • যখন আপনি ডেটা নির্দিষ্ট Partition Key বা Sort Key এর উপর ভিত্তি করে খুঁজতে চান।
  • যখন আপনাকে দ্রুত পারফরম্যান্সের প্রয়োজন হয় এবং টেবিলের আকার বড় না হয়।

কখন Scan ব্যবহার করবেন?

  • যখন আপনার কাছে একটি ছোট টেবিল থাকে এবং সমস্ত ডেটা স্ক্যান করার প্রয়োজন হয়।
  • যখন আপনি কোনো নির্দিষ্ট Partition Key বা Sort Key ছাড়া টেবিলের সমস্ত ডেটা পরীক্ষা করতে চান।

উপসংহার:

Query হল সবচেয়ে দক্ষ এবং দ্রুত ডেটা খোঁজার পদ্ধতি যদি আপনি নিশ্চিতভাবে জানেন কোন Partition Key বা Sort Key এর উপর ভিত্তি করে ডেটা খুঁজছেন। অন্যদিকে, Scan সাধারণত তখনই ব্যবহার করা উচিত যখন আপনার টেবিলের মধ্যে মেলানো ডেটার কোনো নির্দিষ্ট গঠন নেই এবং পুরো টেবিলের সব ডেটা একসাথে স্ক্যান করতে হবে।

common.content_added_by

Pagination এবং Result Limit সেট করা

205
205

DynamoDB তে pagination এবং result limit সেট করা একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, বিশেষত যখন আপনার টেবিলটি খুব বড় হয় এবং ডেটার পরিমাণ বেশি থাকে। DynamoDB তে Query এবং Scan অপারেশনে pagination ব্যবহার করে আপনি একাধিক পৃষ্ঠার ফলাফল পেতে পারেন, এবং result limit ব্যবহার করে আপনি কতগুলি রেকর্ড ফেরত পাবেন তা সীমাবদ্ধ করতে পারেন।

Pagination (পেজিনেশন)

Pagination ব্যবহার করার মাধ্যমে আপনি একটি বড় ডেটাসেটের ফলাফলকে ছোট ছোট অংশে ভাগ করতে পারেন। এটি LastEvaluatedKey ব্যবহার করে করা হয়।

Pagination এর ধারণা:

  • LastEvaluatedKey: এটি একটি বিশেষ key যা DynamoDB এর ফলাফল পৃষ্ঠার শেষের আইটেমের তথ্য ধারণ করে। আপনি যখন নতুন পেজের জন্য প্রশ্ন করবেন, তখন এই LastEvaluatedKey দিয়ে পরবর্তী পৃষ্ঠা শুরু হবে।

১. Query তে Pagination

Query অপারেশনটি যখন অনেক রেকর্ড ফেরত দেয়, তখন পেজিনেশন ব্যবহারের মাধ্যমে আপনি একাধিক পৃষ্ঠার ফলাফল পাবেন। DynamoDB স্বয়ংক্রিয়ভাবে শুধুমাত্র একটি নির্দিষ্ট পরিমাণের রেকর্ড ফিরিয়ে দেয় (যেটি Limit দ্বারা নির্ধারিত), এবং পরবর্তী পেজ পাওয়ার জন্য LastEvaluatedKey ব্যবহার করা হয়।

Query এর উদাহরণ (Pagination):

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')

# প্রথম পেজে Query অপারেশন
response = table.query(
    KeyConditionExpression=Key('PrimaryKey').eq('value1'),
    Limit=10  # প্রতি পৃষ্ঠায় ১০টি রেকর্ড ফিরিয়ে দিবে
)

# প্রথম পেজের রেকর্ড প্রিন্ট করা
for item in response['Items']:
    print(item)

# পরবর্তী পেজ পেতে LastEvaluatedKey ব্যবহার করা
while 'LastEvaluatedKey' in response:
    response = table.query(
        KeyConditionExpression=Key('PrimaryKey').eq('value1'),
        Limit=10,
        ExclusiveStartKey=response['LastEvaluatedKey']
    )
    
    # পরবর্তী পৃষ্ঠার রেকর্ড প্রিন্ট করা
    for item in response['Items']:
        print(item)

Key Points:

  • Limit: প্রতি পৃষ্ঠায় কতটি রেকর্ড ফেরত দিবে তা নির্ধারণ করে।
  • ExclusiveStartKey: পরবর্তী পেজের জন্য LastEvaluatedKey ব্যবহার করতে হবে।

২. Scan তে Pagination

Scan অপারেশনেও pagination ব্যবহার করা হয়, তবে এটি Query এর তুলনায় কম পারফরম্যান্স সহ, কারণ Scan পুরো টেবিল স্ক্যান করে।

Scan এর উদাহরণ (Pagination):

import boto3

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')

# প্রথম পেজে Scan অপারেশন
response = table.scan(
    Limit=10  # প্রতি পৃষ্ঠায় ১০টি রেকর্ড ফিরিয়ে দিবে
)

# প্রথম পেজের রেকর্ড প্রিন্ট করা
for item in response['Items']:
    print(item)

# পরবর্তী পেজ পেতে LastEvaluatedKey ব্যবহার করা
while 'LastEvaluatedKey' in response:
    response = table.scan(
        Limit=10,
        ExclusiveStartKey=response['LastEvaluatedKey']
    )
    
    # পরবর্তী পৃষ্ঠার রেকর্ড প্রিন্ট করা
    for item in response['Items']:
        print(item)

Key Points:

  • Limit: স্ক্যান অপারেশনের জন্য প্রতি পৃষ্ঠায় কতটি রেকর্ড ফেরত দিবে তা নির্ধারণ করা হয়।
  • ExclusiveStartKey: পরবর্তী পৃষ্ঠার জন্য LastEvaluatedKey ব্যবহার করতে হবে।

৩. Result Limit (রেকর্ড সীমিত করা)

Result Limit এর মাধ্যমে আপনি Query বা Scan অপারেশনে ফেরত আসা ডেটার সংখ্যা সীমিত করতে পারেন। এটি Limit প্যারামিটার দিয়ে নির্ধারণ করা হয়।

যখন আপনার টেবিল বড় হয়ে যায় এবং আপনি একাধিক আইটেম এক সাথে রিটার্ন করতে চান না, তখন Limit প্যারামিটার ব্যবহার করে আপনি একটি নির্দিষ্ট পরিমাণ আইটেম রিটার্ন করতে পারেন।

Result Limit ব্যবহার করা:

import boto3
from boto3.dynamodb.conditions import Key

# DynamoDB ক্লায়েন্ট তৈরি
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')

# Query অপারেশনে Result Limit সেট করা
response = table.query(
    KeyConditionExpression=Key('PrimaryKey').eq('value1'),
    Limit=5  # প্রতি পৃষ্ঠায় ৫টি রেকর্ড রিটার্ন করবে
)

# রেকর্ড প্রিন্ট করা
for item in response['Items']:
    print(item)

সামগ্রিকভাবে:

  • Pagination: এটি একাধিক পৃষ্ঠার মাধ্যমে ফলাফল ফেরত দেয় এবং LastEvaluatedKey ব্যবহার করে পরবর্তী পৃষ্ঠা পাওয়ার জন্য সহায়তা করে।
  • Result Limit: এটি একটি নির্দিষ্ট পরিমাণ রেকর্ড ফেরত দেয়, যা আপনাকে একবারে কতটি রেকর্ড পেতে চান তা নিয়ন্ত্রণ করতে দেয়।

এই দুটি ফিচার ব্যবহার করে আপনি DynamoDB তে ডেটা পড়ার কার্যকারিতা আরও উন্নত করতে পারবেন এবং বড় ডেটাসেটগুলো সহজে ম্যানেজ করতে পারবেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion